package com.docmgmt.mvp.ragflow.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;

/**
 * RAGFlow 更新知识库请求 DTO
 * 
 * PUT /api/v1/datasets/{dataset_id}
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UpdateKnowledgeBaseRequest {

    /**
     * 知识库名称（1-255字符）
     */
    @NotBlank(message = "知识库名称不能为空")
    @Size(min = 1, max = 255, message = "知识库名称长度必须在1-255之间")
    private String name;

    /**
     * 知识库描述（可选，最大65535字符）
     */
    @Size(max = 65535, message = "描述长度不能超过65535")
    private String description;

    /**
     * 头像（Base64编码，可选）
     */
    private String avatar;

    /**
     * 嵌入模型（格式：<model_name>@<provider>）
     * 例如：netease-youdao/bce-embedding-base_v1@SILICONFLOW
     */
    @JsonProperty("embedding_model")
    private String embeddingModel;

    /**
     * 权限：me（仅自己）/ team（团队共享）
     */
    @Pattern(regexp = "^(me|team)$", message = "permission必须是me或team")
    private String permission;

    /**
     * 分块方法
     * 支持：naive, manual, qa, table, paper, book, laws, presentation, picture, one, email, tag
     */
    @JsonProperty("chunk_method")
    @Pattern(
        regexp = "^(naive|manual|qa|table|paper|book|laws|presentation|picture|one|email|tag)$",
        message = "chunk_method必须是支持的类型之一"
    )
    private String chunkMethod;

    /**
     * 解析器配置
     */
    @JsonProperty("parser_config")
    @Valid
    private ParserConfigDTO parserConfig;

    /**
     * 语言（已废弃，保留兼容性）
     */
    @Deprecated
    private String language;
}

